package sw

import (
	"crypto/sha256"
	"errors"

	"blockchain/bccsp"
)

//aes 的秘钥
type aesPrivateKey struct {
	//秘钥真实值
	privKey []byte
	//是否可输出
	exportable bool
}

// 只有再可输出的情况下才能输出
func (k *aesPrivateKey) Bytes() (raw []byte, err error) {
	if k.exportable {
		return k.privKey, nil
	}

	return nil, errors.New("Not supported.")
}

// 唯一标志符是hash(0x01+k.privKey)
func (k *aesPrivateKey) SKI() (ski []byte) {
	hash := sha256.New()
	hash.Write([]byte{0x01})
	hash.Write(k.privKey)
	return hash.Sum(nil)
}

// 是对称钥
func (k *aesPrivateKey) Symmetric() bool {
	return true
}

// 对称钥默认是私钥
func (k *aesPrivateKey) Private() bool {
	return true
}

// 对称钥默认返回false
func (k *aesPrivateKey) PublicKey() (bccsp.Key, error) {
	return nil, errors.New("Cannot call this method on a symmetric key.")
}
